//
//  BAHomeCell.swift
//  BAweibo
//
//  Created by baggio on 2017/8/17.
//  Copyright © 2017年 baggio. All rights reserved.
//

/*

- 原创微博
    - 头像
    - 名字
    - 会员等级
    - 时间
    - 来源
    - 认证类型
    - 微博文字
    - 配图（可能有也可能没有）
- 转发微博（可能有也可能没有）
    - 微博文字
    - 配图（可能有也可能没有）
- 底部视图
    - 转发
    - 评论
    - 赞
 */

/*
 首页都做好以后，要做这些优化：
    1.把设置背景色：originalView 白色，retweetView 灰色，bottom 白色
    2.配图使用 originalView 或 originalView 的背景色（可以使用 透明色，但是透明色性能不好，一般只用于图片只渲染一次的情况）
    3.tableView 的 cell 之间默认有个墨绿色的边界，设置个 style 把它去掉
    4.需求：cell 之间有宽度为8的灰色背景作为间距，可以让 originalView 的 top 距离 cell 为8
 */

import UIKit
import SnapKit

class BAHomeCell: UITableViewCell {
    
    //保存约束
    private var bottomViewTopContraint: Constraint?
    
    //外界给 cell 的 homeModel 赋值的时候，要给 cell 里面的 originalView 的 homeModel 赋值
//    var homeModel: BAHomeModel? {
//        didSet{
//            originalView.homeModel = homeModel
//        }
//    }
    //改成 homeViewModel
    var homeViewModel: BAHomeViewModel? {
        didSet{
            originalView.homeViewModel = homeViewModel
            
//            //先假设一定有转发微博
//            retweetView.homeViewModel = homeViewModel
            
            /*
             改成根据实际数据判断：
             retweeted_status 如果有值，则有转发微博
                - retweetView 赋值
                - bottomView.top = retweetView.Bottom
                - 显示 retweetView
             如果没有值，则没有转发微博
                - bottomView.top = originalView.bottom
                - 隐藏 retweetView
             */
            
            //约束发生改变，如果参照物不变，可以用 updateConstraints
            //但是这里参照物改变了，所以不能直接写，需要先卸载约束，然后再写，写完以后再保存约束
            bottomViewTopContraint?.deactivate()
            if homeViewModel?.homeModel?.retweeted_status != nil {
                //赋值
                retweetView.homeViewModel = homeViewModel
                //约束
                bottomView.snp.makeConstraints({ (m) in
                    bottomViewTopContraint = m.top.equalTo(retweetView.snp.bottom).constraint
                })
                //显示
                retweetView.isHidden = false
            } else {
                //约束
                bottomView.snp.makeConstraints({ (m) in
                    bottomViewTopContraint = m.top.equalTo(originalView.snp.bottom).constraint
                })
                //隐藏
                retweetView.isHidden = true
            }
        }
    }
    
    
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        setUpUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setUpUI() {
        //测试
//        backgroundColor = randomColor()
        backgroundColor = RGB(red: 235, green: 235, blue: 235)
        
        addSubview(originalView)
        //UITableViewCell 中有个属性 contentView，因此也可以用 contentView
        //contentView.addSubview(originalView)
        
        //做的时候先假设一定有 retweetView，后面再根据真实数据决定是否隐藏
        addSubview(retweetView)
        addSubview(bottomView)
        
//        originalView.snp.makeConstraints { (m) in
//            m.left.top.right.equalTo(self) //也可以 contentView
//            //临时测试用
////            m.height.equalTo(50)
//        }
        //需求：cell 之间有宽度为8的灰色背景作为间距，可以让 originalView 的 top 距离 cell 为8
        originalView.snp.makeConstraints { (m) in
            m.left.right.equalTo(self) //也可以 contentView
            m.top.equalTo(self).offset(8)
            //临时测试用
            //            m.height.equalTo(50)
        }
        
        retweetView.snp.makeConstraints { (m) in
            m.left.right.equalTo(originalView)
            m.top.equalTo(originalView.snp.bottom)
        }
        
        bottomView.snp.makeConstraints { (m) in
            m.left.right.bottom.equalTo(self)
            m.height.equalTo(35)
            //要 tableView 自动计算高度，这里最后一个内部 view 的四周的约束都要写全；如果 tableView.rowHeight 写死，这句可以省略
//            m.top.equalTo(retweetView.snp.bottom)
            //保存约束
            bottomViewTopContraint = m.top.equalTo(retweetView.snp.bottom).constraint
  
        }
    }
    
    
    //原创视图
    private lazy var originalView: BAHomeOriginalView = BAHomeOriginalView()
    
    //转发微博
    private lazy var retweetView: BAHomeRetweetView = BAHomeRetweetView()
    
    //底部视图
    private lazy var bottomView: BAHomeBottomView = BAHomeBottomView()
    
}
